{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "76fe6014-5b1c-4237-a49c-2e631543dac9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz\n",
      "\u001b[1m17464789/17464789\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 0us/step \n",
      "x_train.shape= (25000,)\n",
      "y_train.shape= (25000,)\n",
      "x_test.shape= (25000,)\n",
      "y_test.shape= (25000,)\n",
      "序列填充前的第一个元素:\n",
      " [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 2, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 2, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 2, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 2, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 117, 2, 15, 256, 4, 2, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 2, 1029, 13, 104, 88, 4, 381, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 2, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 2, 18, 51, 36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 2, 113, 103, 32, 15, 16, 2, 19, 178, 32]\n",
      "序列填充后的第一个元素:\n",
      " [   1   14   22   16   43  530  973 1622 1385   65  458    2   66 3941\n",
      "    4  173   36  256    5   25  100   43  838  112   50  670    2    9\n",
      "   35  480  284    5  150    4  172  112  167    2  336  385   39    4\n",
      "  172    2 1111   17  546   38   13  447    4  192   50   16    6  147\n",
      " 2025   19   14   22    4 1920    2  469    4   22   71   87   12   16\n",
      "   43  530   38   76   15   13 1247    4   22   17  515   17   12   16\n",
      "  626   18    2    5   62  386   12    8  316    8  106    5    4 2223\n",
      "    2   16  480   66 3785   33    4  130   12   16   38  619    5   25\n",
      "  124   51   36  135   48   25 1415   33    6   22   12  215   28   77\n",
      "   52    5   14  407   16   82    2    8    4  107  117    2   15  256\n",
      "    4    2    7 3766    5  723   36   71   43  530  476   26  400  317\n",
      "   46    7    4    2 1029   13  104   88    4  381   15  297   98   32\n",
      " 2071   56   26  141    6  194    2   18    4  226   22   21  134  476\n",
      "   26  480    5  144   30    2   18   51   36   28  224   92   25  104\n",
      "    4  226   65   16   38 1334   88   12   16  283    5   16    2  113\n",
      "  103   32   15   16    2   19  178   32    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0    0    0    0    0    0    0\n",
      "    0    0    0    0    0    0    0    0]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\root\\anaconda3\\Lib\\site-packages\\keras\\src\\layers\\core\\embedding.py:97: UserWarning: Argument `input_length` is deprecated. Just remove it.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[1mModel: \"sequential\"\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
       "┃<span style=\"font-weight: bold\"> Layer (type)                         </span>┃<span style=\"font-weight: bold\"> Output Shape                </span>┃<span style=\"font-weight: bold\">         Param # </span>┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
       "│ embedding (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Embedding</span>)                │ ?                           │     <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (unbuilt) │\n",
       "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
       "│ dropout (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>)                    │ ?                           │               <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
       "│ lstm (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">LSTM</span>)                          │ ?                           │     <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (unbuilt) │\n",
       "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
       "│ dropout_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>)                  │ ?                           │               <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
       "│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                        │ ?                           │     <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (unbuilt) │\n",
       "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n",
       "</pre>\n"
      ],
      "text/plain": [
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
       "┃\u001b[1m \u001b[0m\u001b[1mLayer (type)                        \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape               \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m        Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
       "│ embedding (\u001b[38;5;33mEmbedding\u001b[0m)                │ ?                           │     \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
       "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
       "│ dropout (\u001b[38;5;33mDropout\u001b[0m)                    │ ?                           │               \u001b[38;5;34m0\u001b[0m │\n",
       "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
       "│ lstm (\u001b[38;5;33mLSTM\u001b[0m)                          │ ?                           │     \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
       "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
       "│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m)                  │ ?                           │               \u001b[38;5;34m0\u001b[0m │\n",
       "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
       "│ dense (\u001b[38;5;33mDense\u001b[0m)                        │ ?                           │     \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
       "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 73ms/step - accuracy: 0.5027 - loss: 0.6931 - val_accuracy: 0.4938 - val_loss: 0.6933\n",
      "Epoch 2/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 73ms/step - accuracy: 0.5019 - loss: 0.6930 - val_accuracy: 0.4938 - val_loss: 0.6939\n",
      "Epoch 3/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 73ms/step - accuracy: 0.5017 - loss: 0.6926 - val_accuracy: 0.4940 - val_loss: 0.6937\n",
      "Epoch 4/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 73ms/step - accuracy: 0.5041 - loss: 0.6919 - val_accuracy: 0.5016 - val_loss: 0.6936\n",
      "Epoch 5/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 74ms/step - accuracy: 0.5069 - loss: 0.6915 - val_accuracy: 0.5034 - val_loss: 0.6931\n",
      "Epoch 6/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 73ms/step - accuracy: 0.5130 - loss: 0.6908 - val_accuracy: 0.5034 - val_loss: 0.6935\n",
      "Epoch 7/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 73ms/step - accuracy: 0.5161 - loss: 0.6907 - val_accuracy: 0.4974 - val_loss: 0.6913\n",
      "Epoch 8/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 73ms/step - accuracy: 0.5592 - loss: 0.6838 - val_accuracy: 0.6046 - val_loss: 0.6781\n",
      "Epoch 9/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 73ms/step - accuracy: 0.5851 - loss: 0.6778 - val_accuracy: 0.6346 - val_loss: 0.6585\n",
      "Epoch 10/10\n",
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 73ms/step - accuracy: 0.5739 - loss: 0.6779 - val_accuracy: 0.5204 - val_loss: 0.6910\n",
      "391/391 - 11s - 27ms/step - accuracy: 0.5122 - loss: 0.6917\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAEUCAYAAABKw2PSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOBZJREFUeJzt3Xt4TOfePvB7MuQkB5HIQZDEOZEiB40kpXuXxqEOoYiyVV+8fV3bbqWq+62NX1+qjaIELaUVWlXS7VDsRkmLJEhb0sQpGkVJkAhKRohEMuv3x+pMMjmZYTJr1sz9ua51ZWbNmjXfmTB3nmc9az0KQRAEEBERyYyN1AUQERE9DgYYERHJEgOMiIhkiQFGRESyxAAjIiJZYoAREZEsMcCIiEiWGGBERCRLDDAiIpKlZlIXYI7UajWuXbsGZ2dnKBQKqcshIrIqgiDg7t27aNOmDWxsGmlnCRL7+OOPBX9/f8HOzk4IDQ0V0tPTG9x20qRJAoA6S1BQkM5227ZtEwIDAwVbW1shMDBQ2LFjh0E1FRQU1Ps6XLhw4cLFdEtBQUGj39WStsCSk5MRHx+P1atXIzo6GmvXrsXgwYORm5uL9u3b19l+xYoVWLRokfZ+ZWUlevbsiTFjxmjXZWZmIi4uDu+++y5GjhyJnTt3YuzYsTh8+DAiIiL0qsvZ2RkAUFBQABcXlyd8l0REZAiVSoV27dppv4sbohAE6S7mGxERgdDQUKxZs0a7LjAwELGxsUhISHjk87/55huMGjUKv//+O/z8/AAAcXFxUKlU2Lt3r3a7QYMGwc3NDVu2bNGrLpVKBVdXV5SUlDDAiIhMTN/vYMkGcVRUVCArKwsxMTE662NiYnD06FG99rF+/XoMGDBAG16A2AKrvc+BAwc2us/y8nKoVCqdhYiIzJtkAXbz5k1UVVXBy8tLZ72XlxeKiooe+fzCwkLs3bsXU6dO1VlfVFRk8D4TEhLg6uqqXdq1a2fAOyEiIilIPoy+9ig/QRD0Gvm3ceNGtGzZErGxsU+8z9mzZ6OkpES7FBQU6Fc8ERFJRrJBHB4eHlAqlXVaRsXFxXVaULUJgoCkpCRMnDgRtra2Oo95e3sbvE87OzvY2dkZ+A6IiEhKkrXAbG1tERYWhtTUVJ31qampiIqKavS5aWlpOH/+PKZMmVLnscjIyDr73L9//yP3SURE8iLpMPqZM2di4sSJCA8PR2RkJNatW4f8/HxMmzYNgNi1d/XqVXzxxRc6z1u/fj0iIiIQHBxcZ58zZsxAv3798MEHH2DEiBHYtWsXvv/+exw+fNgk74mIiExD0gCLi4vDrVu3sGDBAhQWFiI4OBgpKSnaUYWFhYXIz8/XeU5JSQm2b9+OFStW1LvPqKgobN26FXPnzsW8efPQsWNHJCcn630OmDEcPw7cuQMoFHUXGxv91xuy7aPW29gASmXjCy86QkRyIul5YObqSc8De/ZZID29CQprYgrFo0OuWbNHb6PPPpo1A5o3113qW9eUj2keb9aM4U1kTvT9Dua1EJtAx47A7duAWg0IQv2LKR9Tq6uXxggCUFkpLtZGoXjycDbW85s3B2xtG16M8bhSKfUnTvTkGGBNIClJ6grqpwmzqqrHWyorH/+5tfdTWQk8fKi71LfuSR+r7/H6+hwEofpxa2Bjo18A1tc6ra+1aoxtHvUchQLw8wPCw8WlRw+xRrJeDDArUrOL0JpVVemGmyaYnySgnzTcaz7/4UOgoqJ6qX2/oaWx7aqqdD8DtRp48EBc5Gb9evGnra0YYppA690bCAoSQ5esA3/VZHU0IW5vL3UlplMzGA0JxPpapA21YJt6XWUlkJcHHDsmDpT64w/x5/Hj1ds4OAC9eolhpgm2rl3FFidZHgYYkRWwtNAWBODSpeowO34cyMoCVCogM1NcNJycgLCw6lZaeDjQoQMH7lgCjkKsB69GTyQ/ajXw22/VgXbsGJCdDdy/X3dbNzcx1Gq21Nq1Y6iZC32/gxlg9WCAEVmGykrg11+rA+34cSAnR+wirc3TszrMNK01b2+Tl0xggD0RBhiR5aqoAE6f1m2pnT5d/+kjvr66XY9hYYCHh+lrtjYMsCfAACOyLmVlwMmTusfUcnPrH0zi7y8GWlgY0LOnOBLSx4fdj8bEAHsCDDAiKi0Vj6FpAu34ceDcufq3dXcHnnpKDDPN0r074Oho2potBQPsCTDAiKg+d+4Av/xSPerx1ClxaH99V7lRKIBOnaoDTRNwAQEc1v8oDLAnwAAjIn2VlQFnz4pdkKdOiT9PnABu3Kh/+xYtxDCr2WJ76ilxZCSJGGBPgAFGRE/q+vXqQNMsZ87UPwISANq21e2CfOop8STs5s1NW7c5YIA9AQYYETWFykrxXLWaoXbqFHD5cv3bN28uXh6rZhdkjx7i8H5LHjTCAHsCDDAiMqU7d8Sh/DW7IU+dAu7erX97d/e6rTUfH/1nrjDF4usLdO78eJ8HA+wJMMCISGpqtdgyq90N+dtvj54ayRxMnw589NHjPZfzgRERyZiNjThiMSAAGD68en1ZmXiOWs0uyJMnG54FXqrFy6vpPyMGGBGRjDg4iCdRh4VJXYn0eDYCERHJEgOMiIhkiQFGRESyxAAjIiJZYoAREZEsMcCIiEiWGGBERCRLDDAiIpIlBhgREckSA4yIiGSJAUZERLLEACMiIlligBERkSwxwIiISJYYYEREJEsMMCIikiUGGBERyRIDjIiIZIkBRkREssQAIyIiWWKAERGRLDHAiIhIlhhgREQkSwwwIiKSJckDbPXq1QgICIC9vT3CwsKQkZHR6Pbl5eWYM2cO/Pz8YGdnh44dOyIpKUn7+MaNG6FQKOosDx48aOq3QkREJtRMyhdPTk5GfHw8Vq9ejejoaKxduxaDBw9Gbm4u2rdvX+9zxo4di+vXr2P9+vXo1KkTiouLUVlZqbONi4sL8vLydNbZ29s32fsgIiLTkzTAli1bhilTpmDq1KkAgMTEROzbtw9r1qxBQkJCne2/++47pKWl4eLFi2jVqhUAwN/fv852CoUC3t7eetdRXl6O8vJy7X2VSmXgOyEiIlOTrAuxoqICWVlZiImJ0VkfExODo0eP1vuc3bt3Izw8HIsXL4avry+6dOmCWbNmoaysTGe70tJS+Pn5oW3bthg6dCiys7MbrSUhIQGurq7apV27dk/25oiIqMlJFmA3b95EVVUVvLy8dNZ7eXmhqKio3udcvHgRhw8fxunTp7Fz504kJiZi27ZtmD59unabbt26YePGjdi9eze2bNkCe3t7REdH47fffmuwltmzZ6OkpES7FBQUGOdNEhFRk5G0CxEQu/tqEgShzjoNtVoNhUKBzZs3w9XVFYDYDTl69Gh8/PHHcHBwQJ8+fdCnTx/tc6KjoxEaGopVq1Zh5cqV9e7Xzs4OdnZ2RnpHRERkCpK1wDw8PKBUKuu0toqLi+u0yjR8fHzg6+urDS8ACAwMhCAIuHLlSr3PsbGxQe/evRttgRERkfxIFmC2trYICwtDamqqzvrU1FRERUXV+5zo6Ghcu3YNpaWl2nXnzp2DjY0N2rZtW+9zBEFATk4OfHx8jFc8ERFJTtLzwGbOnInPPvsMSUlJOHv2LN544w3k5+dj2rRpAMRjUy+//LJ2+/Hjx8Pd3R3/9V//hdzcXKSnp+Ott97C5MmT4eDgAACYP38+9u3bh4sXLyInJwdTpkxBTk6Odp9ERGQZJD0GFhcXh1u3bmHBggUoLCxEcHAwUlJS4OfnBwAoLCxEfn6+dnsnJyekpqbitddeQ3h4ONzd3TF27FgsXLhQu82dO3fw6quvoqioCK6urggJCUF6ejqefvppk78/IiJqOgpBEASpizA3KpUKrq6uKCkpgYuLi9TlEBFZFX2/gyW/lBQREdHjYIAREZEsMcCIiEiWGGBERCRLDDAiIpIlBhgREckSA4yIiGSJAUZEJGdqNbBmDbB9u9SVmJzkV6MnIqLHVF4OvPIKsHUr0KwZcP068Odkv9aALTAiIjkqKQEGDxbDCwAqK4F9+6StycQYYEREcnPlCtC3L3DwIODkBDz/vLj+P/+Rti4TYxciEZGcnDkDDBokhpi3N5CSAty/D6SmAnv3ii2xZtbx1c4WGBGRXKSlAc88I4ZX165AZiYQEgL06SMe+7p9W1xnJRhgRERy8PXXQEwMcOcOEBUFHDkC+PuLjymV4vEwAPj2W6kqNDkGGBGRuUtMBMaNAyoqgNhY4PvvAXd33W2GDhV/WtFxMAYYEZG5UquBN98E3ngDEARg+nRg2zbgzxnodQwcKLbEzpwBLl0yealSYIAREZmj8nJg/Hhg2TLx/qJFwKpVYkjVx80NiI4Wb1tJNyIDjIjI3Ny5I440TE4WRxRu2gT87/8CCkXjz7OybkQGGBGROdGc43XoEODsLA6T/9vf9HuuJsAOHABKS5usRHPBACMiMhenTwORkeJPHx8gPb36JGV9dOsGBASIgz1++KHp6jQTDDAiInNw6FD1OV7duonnc/XqZdg+FIrqVpgVHAdjgBERSS05WRxFWFIiDsQ4cgTw83u8fdU8DiYIxqvRDDHAiIiktGxZ9Tleo0aJl4R6kivKP/ss0KIFUFgIZGcbr04zZHCA+fv7Y8GCBcjPz2+KeoiIrINaDcycKZ7nBQCvvSZebaO+c7wMYWdXfdzMwrsRDQ6wN998E7t27UKHDh3w/PPPY+vWrSgvL2+K2oiILNODB8BLLwHLl4v3Fy8GVqxo+BwvQ1nJcHqFIDxeJ+mJEyeQlJSELVu2oLKyEuPHj8fkyZMRGhpq7BpNTqVSwdXVFSUlJXBxcZG6HCKyJLdvi5eDSk8HmjcHNm4UT1g2psJCoE0b8XZREeDlZdz9NzF9v4Mf+xhYz549sWLFCly9ehXvvPMOPvvsM/Tu3Rs9e/ZEUlISHjMXiYgsV0GBeI5Xerp4jtfevcYPL0Acgh8WJt5OSTH+/s3EYwfYw4cP8fXXX2P48OF48803ER4ejs8++wxjx47FnDlzMGHCBGPWSUQkb6dOied4nTkjto4yMoD+/Zvu9axgOL3Bs5798ssv2LBhA7Zs2QKlUomJEydi+fLl6Natm3abmJgY9OvXz6iFmqOqqio8fPhQ6jKoHra2trCx4SBbMhMHD4rdhioVEBgIfPcd0L59077m0KHA/PnAvn3iCEdb26Z9PQkYHGC9e/fG888/jzVr1iA2NhbNmzevs01QUBDGjRtnlALNkSAIKCoqwp07d6QuhRpgY2ODgIAA2Frgf1qSma1bgUmTxBDp2xf45psnGyavr9BQccbmoiKxy3LAgKZ/TRMzOMAuXrwIv0ecYNeiRQts2LDhsYsyd5rw8vT0hKOjIxSPusAmmZRarca1a9dQWFiI9u3b8/dD0hAE8RyvWbPE+6NHixfltbc3zevb2ABDhgBJSWI3IgMMKC4uRlFRESIiInTW//TTT1AqlQgPDzdaceaoqqpKG17utSeUI7PRunVrXLt2DZWVlfX2EhA1Kc05XitWiPdff10MM2MNk9fX0KFigO3ZI76+hf0xZ/BBgunTp6OgoKDO+qtXr2L69OlGKcqcaY55OTo6SlwJNUbTdVhVVSVxJWR1HjwQr6yhCa+lS8UZlU0dXoDY6rK1BS5cAM6dM/3rNzGDAyw3N7fec71CQkKQm5trlKLkgN1S5o2/H5LE7dviNQ3//W/xHK+vvhKvtCHVv0dnZ+AvfxFvW+BJzQYHmJ2dHa5fv15nfWFhIZo1M7hHkojIMuTni1eTT08HXFzEkYYvvSR1VcALL4g/LXA4vcEB9vzzz2P27NkoKSnRrrtz5w7+9a9/4XlD5q0hWfP390diYqLUZRCZh5MnxXO8cnMBX1/xHK/nnpO6KpEmwDIyxJmeLYjBTaYPP/wQ/fr1g5+fH0JCQgAAOTk58PLywqZNm4xeIBnPX/7yF/Tq1csowXPs2DG0aNHiyYsikrsDB4CRI8VzvLp3F6+u0a6d1FVV69hRPPfs7Flg/35g7FipKzIag1tgvr6+OHnyJBYvXoygoCCEhYVhxYoVOHXqFNqZ0y+NDCYIAiorK/XatnXr1hzIQrRlCzBokBhe/fqJrRxz/B7UtMIs7TiYQHWUlJQIAISSkpI6j5WVlQm5ublCWVmZdp1aLQilpdIsarV+72nSpEkCAJ1lw4YNAgDhu+++E8LCwoTmzZsLBw4cEM6fPy8MHz5c8PT0FFq0aCGEh4cLqampOvvz8/MTli9frr0PQPj000+F2NhYwcHBQejUqZOwa9eux/r8jaG+3xOR0ajVgrB4sSCIZ3sJwpgxgmDO/9YOHRLr9PAQhMpKqat5pMa+g2t67FEXubm5yM/PR0VFhc764cOHP3aYytX9+4CTkzSvXVoqzl33KCtWrMC5c+cQHByMBQsWAADOnDkDAPjnP/+JpUuXokOHDmjZsiWuXLmCIUOGYOHChbC3t8fnn3+OYcOGIS8vD+0bufzN/PnzsXjxYixZsgSrVq3ChAkTcPnyZbQyxVUHiExpxQrgn/8Ub8fHAx9+KJ44bK6iooCWLYGbN4GffxaP11kCQ5PxwoULQo8ePQSFQiHY2NgICoVCe9vGxuaxE9ecGNoCKy2t/kPM1Etpqf7v69lnnxVmzJihvX/w4EEBgPDNN9888rlBQUHCqlWrtPfra4HNnTu3xmdSKigUCmHv3r36F2hEbIFRk1GrBaFDB/E/4Pz5Ulejv3HjxJr/9S+pK3kkfVtgBv/JMGPGDAQEBOD69etwdHTEmTNnkJ6ejvDwcBw6dMjgAF29ejUCAgJgb2+PsLAwZGRkNLp9eXk55syZAz8/P9jZ2aFjx45ISkrS2Wb79u0ICgqCnZ0dgoKCsHPnToPrMoSjo9gSkmIxxmGo2ldPuXfvHv75z38iKCgILVu2hJOTE3799ddHzsLdo0cP7e0WLVrA2dkZxcXFT14gkTk5dQq4eFG8JJRmNmU5sMDh9AZ3IWZmZuLAgQNo3bo1bGxsYGNjg2eeeQYJCQl4/fXXkZ2drfe+kpOTER8fj9WrVyM6Ohpr167F4MGDkZub22BX1dixY3H9+nWsX78enTp1QnFxsc7Ag8zMTMTFxeHdd9/FyJEjsXPnTowdOxaHDx+uc/krY1Eo9OvGM1e1RxO+9dZb2LdvH5YuXYpOnTrBwcEBo0ePrtNdXFvtSzYpFAqo1Wqj10skqW++EX/GxMjrP/6gQWI354kT4rxk5jjYxEAGt8Cqqqrg9OcBHw8PD1y7dg0A4Ofnh7y8PIP2tWzZMkyZMgVTp05FYGAgEhMT0a5dO6xZs6be7b/77jukpaUhJSUFAwYMgL+/P55++mlERUVpt0lMTNSeq9atWzfMnj0b/fv35zlLEC+vpM+llTIyMvDKK69g5MiReOqpp+Dt7Y1Lly41fYFEcqDp0Rk5Uto6DOXhUX3sy0JaYQYHWHBwME6ePAkAiIiIwOLFi3HkyBEsWLAAHTp00Hs/FRUVyMrKQkxMjM76mJgYHD16tN7n7N69G+Hh4Vi8eDF8fX3RpUsXzJo1C2VlZdptMjMz6+xz4MCBDe4TELslVSqVzmKJ/P398dNPP+HSpUu4efNmg62jTp06YceOHcjJycGJEycwfvx4tqSIAOD334GcHLElo5kwUk4sbDi9wQE2d+5c7ZfZwoULcfnyZfTt2xcpKSlYuXKl3vu5efMmqqqq4OXlpbPey8sLRUVF9T7n4sWLOHz4ME6fPo2dO3ciMTER27Zt07mIcFFRkUH7BICEhAS4urpqF0s9n23WrFlQKpUICgpC69atGzymtXz5cri5uSEqKgrDhg3DwIED673+JZHV2bVL/Nmvn9iikRtN6P7wgzh8WuYMPgY2cOBA7e0OHTogNzcXf/zxB9zc3B7rAqq1nyMIQoP7UavVUCgU2Lx5M1xdXQGI3ZCjR4/Gxx9/DAcHB4P3CQCzZ8/GzJkztfdVKpVFhliXLl2QmZmps+6VV16ps52/vz8OHDigs672TAO1uxQFQaizH074SRZH030YGytpGY8tOFicCTo/X5wlWtMikymDWmCVlZVo1qwZTp8+rbO+VatWBoeXh4cHlEplnZZRcXFxnRaUho+PD3x9fbXhBQCBgYEQBAFXrlwBAHh7exu0T0C8QLGLi4vOQkSk48YN4PBh8bZcA0yhqG6FWUA3okEB1qxZM/j5+RlljiVbW1uEhYUhNTVVZ31qaqrOoIyaoqOjce3aNZSWlmrXnTt3DjY2Nmjbti0AIDIyss4+9+/f3+A+iYj0smePOFFlaCjwiFnpzVrN4fT19JzIiqEnmCUlJQmDBw8Wbt269VgnqNW0detWoXnz5sL69euF3NxcIT4+XmjRooVw6dIlQRAE4e233xYmTpyo3f7u3btC27ZthdGjRwtnzpwR0tLShM6dOwtTp07VbnPkyBFBqVQKixYtEs6ePSssWrRIaNasmfDjjz/qXZehJzKT+eHviYxu6FDxROAFC6Su5Mncvy8IDg7iezlxQupq6tVkl5JauXIlzp8/jzZt2sDPz6/OOUS//PKL3vuKi4vDrVu3sGDBAhQWFiI4OBgpKSnw+/Ovm8LCQp2BBk5OTkhNTcVrr72G8PBwuLu7Y+zYsVi4cKF2m6ioKGzduhVz587FvHnz0LFjRyQnJzfZOWBEZAXu3gU0PTtyGz5fm4ODOFPznj1iN2KNCxDIjUIQDGtDzp8/v9HH33nnnScqyByoVCq4urqipKSkzvGwBw8e4Pfff9dePYTME39PZFTbtgFjxgCdOgHnzkk3w7KxrF0LTJsmnhfWyClGUmnsO7gmg1tglhBQREQGqTn6UO7hBVQfB/vxR/ECv3I8JQCPcR4YEZFVqaiovnKF3LsPNdq2BXr1Egdx7N0rdTWPzeAAs7GxgVKpbHAhIrIohw4BJSWAlxfQp4/U1RiPBQynN7gLsfaV3R8+fIjs7Gx8/vnnjzw+RkQkO5rvvBEjzHvOL0O98AKwcCGwbx/w8CFQ62LccmBwgI0YMaLOutGjR6N79+5ITk7GlClTjFIYmR9/f3/Ex8cjPj4egHjFk507dyK2gZM6L126hICAAGRnZ6NXr14mq5PIaNTq6stHWUr3oUbv3kDr1uIJ2keOAH/5i9QVGcxof05ERETg+++/N9buSAYKCwsxePBgo+7zlVdeaTAQiUzu55+BwkLAxQV47jmpqzEupRIYMkS8LdNuRKMEWFlZGVatWqW9GgZZB29vb9jZ2UldBlHT0XQfDhkC2NpKW0tTkPlxMIMDzM3NDa1atdIubm5ucHZ2RlJSEpYsWdIUNZo/QQDu3ZNm0fM0vrVr18LX17fOtCjDhw/HpEmTcOHCBYwYMQJeXl5wcnJC7969H9miVigU+EYzuR+An3/+GSEhIbC3t0d4eHidyU2rqqowZcoUBAQEwMHBAV27dsWKFSu0j//f//0fPv/8c+zatQsKhQIKhUI7y/fVq1cRFxcHNzc3uLu7Y8SIEZyjjJqWIMh37i99Pf880KwZkJcHnD8vdTUGM/gY2PLly3Uu3GtjY4PWrVsjIiICbm5uRi1ONu7fB/6c5NPkSkv1mhV2zJgxeP3113Hw4EH0798fAHD79m3s27cPe/bsQWlpKYYMGYKFCxfC3t4en3/+OYYNG4a8vLwGZ8eu6d69exg6dCiee+45fPnll/j9998xY8YMnW3UajXatm2Lr7/+Gh4eHjh69CheffVV+Pj4YOzYsZg1axbOnj0LlUqFDRs2ABAvFH3//n389a9/Rd++fZGeno5mzZph4cKFGDRoEE6ePAlbS/zLmKR39izw229iy8vIXeVmw9VVnBrmwAHxVIFa/2fNnkkubCUzBl8LsbRUvK6YFEtpqd7va/jw4cLkyZO199euXSt4e3sLlZWV9W4fFBQkrFq1Snvfz89PWL58ufY+AGHnzp3afbVq1Uq4d++e9vE1a9YIAITs7OwGa/r73/8uvPjii9r7kyZNEkaMGKGzzfr164WuXbsKarVau668vFxwcHAQ9u3bV+9+eS1EemILF4r/x4YMkbqSprVsmfg+BwyQuhKtJrsW4oYNG+Dk5IQxY8borP/3v/+N+/fvY9KkSUYJVllxdBRbQlK9tp4mTJiAV199FatXr4adnR02b96McePGQalU4t69e5g/fz7+85//4Nq1a6isrERZWVmDk17WdvbsWfTs2ROONeqJ1ExfXsMnn3yCzz77DJcvX0ZZWRkqKioeOUIxKysL58+fh7Ozs876Bw8e4MKFC3rVR2QwS+8+1HjhBWDmTCAtTbzmY63/Z+bM4ABbtGgRPvnkkzrrPT098eqrr1pngCkUenXjSW3YsGFQq9X49ttv0bt3b2RkZGDZsmUAgLfeegv79u3D0qVL0alTJzg4OGD06NGoqKjQa9+CHsfivv76a7zxxhv48MMPERkZCWdnZyxZsgQ//fRTo89Tq9UICwvD5s2b6zzWunVrveojMkhBAZCVJf7fHj5c6mqaVpcuQOfOYndpaiowapTUFenN4AC7fPkyAgIC6qz38/PT+691koaDgwNGjRqFzZs34/z58+jSpQvCwsIAABkZGXjllVcw8s+/NktLSw0aJBEUFIRNmzahrKxMOzP2jz/+qLNNRkYGoqKi8Pe//127rnYLytbWts58c6GhoUhOToanpycnGyXT0AxOio4GPD0lLcUkhg4Fli8XRyPKKMAMHoXo6emJkydP1ll/4sQJuLu7G6UoajoTJkzAt99+i6SkJPztb3/Tru/UqRN27NiBnJwcnDhxAuPHj68zYrEx48ePh42N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",
      "text/plain": [
       "<Figure size 1000x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m9/9\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 42ms/step \n",
      "评论为：\n",
      " The ultimate story of friendship,of hope, and od life,and overcoming adversity.I understand why so many class this as the best film of all time,it isn't mine,but I get it. If you haven't seen it, or haven't seen it for some time,you need to watch it,it's amazing.\n",
      "预测结果为： 正面评论\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "imdb = tf.keras.datasets.imdb\n",
    "(x_train,y_train),(x_test,y_test)=imdb.load_data(num_words=4000)\n",
    "print(\"x_train.shape=\",x_train.shape)\n",
    "print(\"y_train.shape=\",y_train.shape)\n",
    "print(\"x_test.shape=\",x_test.shape)\n",
    "print(\"y_test.shape=\",y_test.shape)\n",
    "\n",
    "print(\"序列填充前的第一个元素:\\n\",x_train[0])\n",
    "x_train=tf.keras.preprocessing.sequence.pad_sequences(x_train,padding='post',maxlen=400,truncating='post')\n",
    "x_test=tf.keras.preprocessing.sequence.pad_sequences(x_test,padding='post',maxlen=400,truncating='post')\n",
    "print(\"序列填充后的第一个元素:\\n\",x_train[0])\n",
    "\n",
    "model=tf.keras.models.Sequential()\n",
    "model.add(tf.keras.layers.Embedding(output_dim=2,input_dim=4000,input_length=400))\n",
    "model.add(tf.keras.layers.Dropout(0.3))\n",
    "model.add(tf.keras.layers.LSTM(32))\n",
    "model.add(tf.keras.layers.Dropout(0.3))\n",
    "model.add(tf.keras.layers.Dense(1,activation='sigmoid'))\n",
    "model.summary()\n",
    "\n",
    "model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])\n",
    "history=model.fit(x_train,y_train,batch_size=64,epochs=10,validation_split=0.2)\n",
    "model.evaluate(x_test,y_test,batch_size=64,verbose=2)\n",
    "\n",
    "loss=history.history['loss']\n",
    "acc = history.history['accuracy']\n",
    "val_loss=history.history['val_loss']\n",
    "val_acc=history.history['val_accuracy']\n",
    "plt.figure(figsize=(10,3))\n",
    "plt.subplot(121)\n",
    "plt.plot(loss,color='b',label='train')\n",
    "plt.plot(val_acc,color='r',label='validate')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "dict={0:\"正面评论\",1:\"负面评论\"}\n",
    "def display_predict(text):\n",
    "    token=tf.keras.preprocessing.text.Tokenizer(num_words=4000)\n",
    "    token.fit_on_texts(text)\n",
    "    input_seq=token.texts_to_sequences(text)\n",
    "    test_seq=tf.keras.preprocessing.sequence.pad_sequences(input_seq,padding='post',maxlen=400,truncating='post')\n",
    "    pred=model.predict(test_seq)\n",
    "    print(\"评论为：\\n\",text)\n",
    "    print(\"预测结果为：\",dict[np.argmax(pred)])\n",
    "test_text=\"The ultimate story of friendship,of hope, and od life,and overcoming adversity.I understand why so many class this as the best film of all time,it isn't mine,but I get it. If you haven't seen it, or haven't seen it for some time,you need to watch it,it's amazing.\"\n",
    "display_predict(test_text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "39398ca5-ae90-46dd-a588-2f8199ff0bb7",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
